<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>race</title>
</head>
<body>
<script>

    function ajax(url) {
        return new Promise((resolve,reject) => {
            let xhr = new XMLHttpRequest();
            xhr.open('GET',url);
            xhr.send();
            xhr.onload = function () {
                if(this.status == 200){
                    resolve(JSON.parse(this.response));
                }else{
                    reject(this);
                }
            }
        });
    }


    /*
    * 使用Promise.race()处理容错异步，和race单词一样，哪个promise执行快就用哪个
    * (1)以最快返回的promise为准
    * (2)如果最快返回的状态为rejected 那么整个promise为rejected 执行catch
    * (3)如果参数不是promise，内部自动转化为promise
    * */
    // const hdcms = new Promise((resolve,reject) => {
    //     setTimeout(() => {
    //         resolve("第一个Promise");
    //     },2000);
    // });
    //
    // const houdunren = new Promise((resolve,reject) => {
    //     setTimeout(() => {
    //         reject("第二个异步");
    //     },1000);
    // });
    //
    // Promise.race([hdcms,houdunren])
    // .then(results => {
    //     console.log('success' + results);
    // })
    // .catch(msg => {
    //     console.log('error' + msg);
    // })
    // ;


    //获取用户资料,如果两秒内没有结果 promise.race 状态失败,执行catch方法
    //如果有结果，请求到数据，就执行正确的数据    哪个跑的快就执行哪个
    const api = "http://localhost/basicjs/promise/php";
    const promises = [
        ajax(`${api}/user.php?name=向军`),
        new Promise((a,b) => {
            setTimeout(() => b(new Error("request fail")),2000)
        })
    ];

    Promise.race(promises)
    .then(response => {
        console.log(response);
    })
    .catch(error => {
        console.log(error);
    })
    ;




</script>
</body>
</html>